這次要試著嘗試使用 Runnable 物件
和認識 Thread, HandlerThread, Handler, Runnable 之間的關係
目標項目
這邊要先了解幾個名詞和他們之間的關係
先宣告幾個我們需要的欄位
handler 就是分配任務的角色
runnable 為實際要執行的任務內容
max 表示進度條的最大值 (0 - 100)
now 為目前的進度
lateinit var handler: Handler
lateinit var runnable : Runnable
var max = 100
var now = 0
onCreate
思路為將增加進度條的動作放在 Runnable 中
->任務內容為增加進度條
接著建構 handler,並經由 handler 這個中間人 post 任務到 MessageQueue
->經由 handler 發送任務到 MessageQueue,postDelayed 表示會有延遲
這邊 handler.postDelayed(runnable, 500) 可以解釋為發送執行任務
而這個動作我們又放在任務本身之中,所以會造成遞迴
又因為有使用 delay 所以可以達到類似 Timer 定時執行任務的效果
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
progressBar.max = this.max
setUI()
handler = Handler()
runnable = Runnable {
increaseProgress()
handler.postDelayed(runnable, 500)
}
...
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
start.setOnClickListener {
runnable.run()
}
pause.setOnClickListener {
pause()
}
stop.setOnClickListener {
pause()
this.now = 0
setUI()
}
...
}
fun pause() {
handler.removeCallbacksAndMessages(null)
}
fun setUI(){
progressBar.progress = now
textView.text = "$now%"
}